iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 5
2
自我挑戰組

菜雞們,讓我們一起征服JS及React吧系列 第 5

React菜雞-Day5:大心~props幫你打包了所有參數

  • 分享至 

  • xImage
  •  
tags: 鐵人賽 React javascript nodejs vscode

前言

鐵人賽的第五天;坦白說,對於接下來的25天要寫些什麼,仍舊沒有什麼把握;不過,開心的是,我的文章開始有了追蹤者,在此跟你們說聲謝謝。/images/emoticon/emoticon41.gif

前四天都在說React的概念及環境搭建,今天我們來個小小實作,讓大家了解一下要怎麼寫個入門級的React Component;實作完,你也學會了如何做參數的傳遞。

不免俗的來個HelloWorld

  1. vscode打開專案,新增一個資料夾/src/components
  2. /src/components資料夾下,新增一個js檔案,並命名為HellWorld.js

Tips: 我們習慣用首字大寫來命名我們的component /images/emoticon/emoticon33.gif

  1. 編輯HelloWorld.js,底下程式碼就是一個function component的雛形
  • src/components/HelloWorld.js
import React from 'react'  //<-- 引入React

function HelloWorld(props) {
    return (
        <div>
        {<h1>{"Received message:"}</h1>}
        </div>
    )
}

export default HelloWorld //<-- 輸出讓其他的js檔案使用
  1. 編輯src/index.js,我們先把一些多餘的程式碼拿掉,更改如下:
  • src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import HelloWorld from "./components/HelloWorld" //<-- 引入我們的HelloWorld component

ReactDOM.render(
    <HelloWorld />,   //<-- 使用它就像用一個<>標籤符號,裡頭放入HelloWorld, 並在尾端給他一個 /,做為結尾
  document.getElementById('root')
);

  1. 存檔後,在terminal終端機輸入npm start,看到以下畫面,為自己歡呼一下

/images/emoticon/emoticon42.gif

傳個參數進去,讓畫面不一樣

  • 編輯src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import HelloWorld from "./components/HelloWorld" //<-- 引入我們的HelloWorld component

ReactDOM.render(
    <HelloWorld msg={"Well Done~ Baby!!"}/>,   //<-- 使用它就像用一個<>標籤符號,裡頭放入HelloWorld, 並在尾端給他一個 /,做為結尾
  document.getElementById('root')
);

  • 編輯src/components/HelloWorld.js
import React from 'react'  //<-- 引入React

function HelloWorld(props) {
    return (
        <div>
        {<h1>{"Received message:"+props.msg}</h1>}
        </div>
    )
}

export default HelloWorld //<-- 輸出讓其他的js檔案使用
  • 各位觀眾???,傳遞資料就是這麼簡單。

一定只能用props嗎?

  • 當然不用,react functional component預設接收的參數,就是用object把傳遞過來的資訊,用keyval收集起來。
  • 不過還是提醒一下,建議各位習慣用props,在React這幾乎是一種默契了/images/emoticon/emoticon61.gif

最後,上點顏色,讓你更具風格

  • index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import HelloWorld from "./components/HelloWorld" //<-- 引入我們的HelloWorld component

ReactDOM.render(
    <HelloWorld msg={"Well Done~ Baby!!"} 
                fontColor={"gold"}   //<--加入文字顏色 
                bgColor={"black"}    //<--加入背景顏色 
                />,   //<-- 使用它就像用一個<>標籤符號,裡頭放入HelloWorld, 並在尾端給他一個 /,做為結尾
  document.getElementById('root')
);

  • src/components/HelloWorld.js
import React from 'react'  //<-- 引入React

function HelloWorld(props) {
    let styledSet = {color: props.fontColor,           //<--用一個變數接收傳遞過來的color
                     backgroundColor: props.bgColor};  //   並放到下方的<h1 style={這裏}>
    return (
        <div>
        {<h1 style={styledSet}>{"Received message:"+props.msg}</h1>}
        </div>
    )
}

export default HelloWorld //<-- 輸出讓其他的js檔案使用
  • 來人啊...還不快給老爺上杯茶/images/emoticon/emoticon65.gif

結論

  • 今天你學習到了:
  • 用function建立一個簡單的React Component
  • 如何export導出React Component ,並在另一個檔案用import的方式導入使用
  • 傳遞參數,創造更豐富的網頁
  • 建議各位花些時間看一下React Hook的官方介紹,文章闡述官方從class component轉為function component帶來了哪些便利。
  • 邁入第五天的鐵人賽,今天的你比昨天更熟悉React了,為自己喝采~Cheers/images/emoticon/emoticon62.gif

參考資源


上一篇
React菜雞-Day4:JSX~混搭前端三元素就是~潮!
下一篇
React菜雞-Day6:用迴圈自動生成多個React-component
系列文
菜雞們,讓我們一起征服JS及React吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言